home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PROGRAMM / BASIC / 2620A.ZIP / APLIB.ZIP / SWW.BAS < prev   
BASIC Source File  |  1990-11-23  |  9KB  |  252 lines

  1.  
  2. '            ┌────────────────────────────────────────────────────────┐
  3. '            │                                                        │
  4. '            │  STATIC WINDOW CODER -- HB. Started 7-26-87 / 7-21-89  │
  5. '            │                                                        │
  6. '            └────────────────────────────────────────────────────────┘
  7.  
  8.  DIM LineBuffer$(30): DIM FL(30): DIM FC(30)
  9.  Q$ = CHR$(34)
  10.  COLOR 14,0
  11.  CLS
  12.  IF INSTR (UCASE$ (COMMAND$), "BATCH") THEN BatchMode = -1
  13.  
  14. Start:
  15.  COLOR 15,2:LOCATE 3,23
  16.  PRINT " THE HB STATIC WINDOW CODE WRITER "
  17.  COLOR 14,0
  18.  IF COMMAND$ <> "" THEN
  19.     FlNm$ = EXTRACT$ (COMMAND$, " ")
  20.  ELSE
  21.     ON ERROR GOTO NoSuchInputFl
  22.     FILES "*.SW"
  23.     ON ERROR GOTO 0
  24.     PRINT  '                                    get a directory ...
  25.  
  26.     COLOR 9,0: INPUT "NAME OF WINDOW DESIGN FILE TO PROCESS:";FlNm$
  27.     IF FlNm$ = "" THEN CLS: GOTO AbnlTermi
  28.     IF INSTR (FlNm$, ".") THEN FlNm$ = LEFT$(FlNm$,(INSTR(FlNm$,".")-1))
  29.  END IF
  30.  COLOR 10,0: CLS
  31.  COLOR 14,4:LOCATE 3,23
  32.  PRINT "THE HB STATIC WINDOW CODE WRITER "
  33.  COLOR 10,0
  34.  LOCATE 7,10:PRINT "Will now make window ";FlNm$;" into compliable Basic"
  35.  LOCATE 8,13:PRINT "DATA statements.
  36.  LOCATE 10,2:PRINT "INPUT FILE IS ";FlNm$+".SW"
  37.  LOCATE 11,2:PRINT "OUTPUT FILE IS ";FlNm$+".INC (note: if a file by that"
  38.  LOCATE 12,30:PRINT " name exists it will be overwritten.)"
  39.  IF NOT BatchMode THEN
  40.    LOCATE 14,20,1: PRINT "PROCEED ? (y/n)";
  41.    DO: K$ = UCASE$ (INKEY$) : LOOP UNTIL K$ = "Y" OR K$ = "N": PRINT K$
  42.    IF K$ <> "Y" THEN PRINT: PRINT "OK, ENDING HERE.": GOTO AbnlTermi
  43.  END IF
  44.  LOCATE ,,0
  45. '                                                 file names are now set ...
  46. OpenFiles:
  47.  
  48.  ON ERROR GOTO NoSuchInputFl:
  49.  OPEN FlNm$+".SW" FOR INPUT AS 1
  50.  ON ERROR GOTO 0
  51.     COLOR 12,0:PRINT:PRINT " INPUT FILE OPEN -- LENGTH = ";LOF(1)
  52.     COLOR 14,0
  53.  
  54.  OPEN FlNm$+".INC" FOR OUTPUT AS 2
  55.  
  56. '=========================== START PROCESSING INPUT FILE ======================
  57.  
  58. SkipBlanks:
  59.  L = 0
  60.  DO
  61.    INCR L: LINE INPUT #1, Inpt$                ' skip blank lines
  62.    IF EOF(1) THEN BEEP: PRINT "OOPS ... Premature End of File": GOTO AbnlTermi
  63.  LOOP UNTIL Inpt$ <> ""
  64.  C = 1
  65. '                                                   ' take 1st line ...
  66. SearchBox:
  67.  LOCATE 24,1: COLOR 12,0:PRINT Inpt$: COLOR 14,0
  68.  DO WHILE LEFT$(Inpt$,1) = " "                       ' chop spaces off left end
  69.      Inpt$ = MID$(Inpt$,2): GOSUB DispLns: INCR C '             and count them ...
  70.  LOOP
  71.  
  72.  IF LEFT$(Inpt$,1) <> "^" THEN
  73.    LOCATE 23,1: PRINT ">";Inpt$: PRINT "OOPS! Checking line";L;
  74.    PRINT ": TOP OF BOX NOT FOUND":GOTO AbnlTermi
  75.  END IF
  76.  
  77. ' ===================== SET WINDOW DIMENSIONS ================================
  78.  
  79.  CornerCol = C: BoxTop = L  '                       top of box has been found
  80.  
  81.  
  82.  Wid = 0
  83.  DO UNTIL MID$(Inpt$,Wid+1,1) <> "^": INCR Wid: LOOP  ' count carrots ...
  84.  
  85.  PRINT  "'   Code to write Static Window {";FlNm$;"} to Screen"
  86.  PRINT  "'        note: created by StatWindow Writer (SWW) from ";FlNm$;".SW"
  87.  PRINT
  88.  PRINT  " COLOR BoxColor MOD 16, BoxColor \ 16"
  89.  PRINT  " LOCATE "+ STR$(BoxTop)+","+STR$(CornerCol)
  90.  
  91.  T$ = "": FOR N = 1 TO Wid-2: T$ = T$+CHR$(196): NEXT
  92.  PRINT  " PRINT "+ Q$ + CHR$(218) + T$ + CHR$(191)
  93.  
  94.  PRINT #2, "'   Code to write Static Window {";FlNm$;"} to Screen"
  95.  PRINT #2, "'        note: created by StatWindow Writer (SWW) from ";FlNm$;".SW"
  96.  PRINT #2, ""
  97.  PRINT #2, " COLOR BoxColor MOD 16, BoxColor \ 16"
  98.  PRINT #2, " LOCATE "+ STR$(BoxTop)+","+STR$(CornerCol)
  99.  PRINT #2, " PRINT "+ Q$ + CHR$(218) + T$ + CHR$(191) + Q$
  100.  
  101.  
  102. '    ============= PARSE REMAINING LINES DOWN TO BOXBOTTOM ===============
  103.  
  104.  N = 2
  105.  DO
  106.    INCR L: LINE INPUT #1, Inpt$
  107.    IF EOF(1) THEN PRINT "ERROR -- INPUT FILE INCOMPLETE": GOTO AbnlTermi
  108.    LOCATE 24,1: COLOR 12,0:PRINT Inpt$: COLOR 14,0
  109.    GOSUB DispLns
  110.  
  111. '                                        cut off leading spaces ...
  112.  
  113.    DO WHILE LEFT$(Inpt$,1) = " ": Inpt$ = MID$(Inpt$,2) : GOSUB DispLns : LOOP
  114.    IF Inpt$ = "" THEN Inpt$ = "^^"
  115.    Inpt$ = MID$(Inpt$,2) '                   cut off the leading carrot ...
  116.  
  117. '                                             see if this is the bottom ...
  118.  
  119.    IF LEFT$(Inpt$,1) = "^" THEN
  120.        BoxBottom = L+1  '   if there's a second carrot this must be the bottom;
  121.        EXIT LOOP
  122.    ELSE
  123. '                                                  at this point the string
  124. '                                                  has to be either spaces
  125. '                                                  & text, spaces only, or "".
  126.  
  127. '               ============= Check4Fields =============
  128.  
  129.        C = 0
  130.        X = 0 '                 otherwise find the field locations in the line...
  131.        DO
  132.          INCR X: INCR C
  133.          IF MID$(Inpt$,X,1) = "{" THEN '              if a field marker is found
  134.            MID$(Inpt$,X) = " "  '                     replace it w/ a space ...
  135.            INCR Fld%
  136.            FL(Fld%) = L  '                          and plug its location into
  137.            FC(Fld%) = C  '                           arrays for later use ...
  138.          GOSUB DispLns
  139.          END IF
  140.          IF MID$(Inpt$,X,1) = "}" THEN MID$(Inpt$,X) = " " '    replace "}" w/  " "
  141.        LOOP UNTIL X >= LEN(Inpt$)
  142.  
  143.  
  144. '                    ============ TrimRightEndOff =============
  145.  
  146.        DO UNTIL RIGHT$(Inpt$,1) <> " " AND RIGHT$(Inpt$,1) <> "^"
  147.          Inpt$ = LEFT$(Inpt$,LEN(Inpt$)-1)
  148.        LOOP
  149.  
  150.    END IF
  151.  
  152.     PRINT #2, " LOCATE "+ STR$(L)+","+STR$(CornerCol)
  153.     PRINT #2, " PRINT "+ Q$ + CHR$(179) + Inpt$ _
  154.                  + SPACE$ (Wid - LEN (Inpt$) - 2) + CHR$(179) + Q$ + ";"
  155. '               LPRINT "                  It is Written ...";
  156.     LOCATE 24,1
  157.     PRINT " LOCATE "+ STR$(L)+","+STR$(CornerCol)
  158.     PRINT " PRINT "+ Q$ + CHR$(179) + Inpt$ _
  159.                  + SPACE$ (Wid - LEN (Inpt$) - 2) + CHR$(179) + Q$ + ";"
  160.  
  161.  LOOP UNTIL BoxBottom
  162.  LOCATE 24,1
  163.  PRINT " LOCATE "+ STR$(L)+","+STR$(CornerCol)
  164.  PRINT " PRINT "+ Q$ + CHR$(192) + T$ + CHR$(217) + Q$ + ";"
  165.  
  166.  PRINT #2, " LOCATE "+ STR$(L)+","+STR$(CornerCol)
  167.  PRINT #2, " PRINT "+ Q$ + CHR$(192) + T$ + CHR$(217) + Q$ + ";"
  168.  
  169.  
  170. '         ===================== READ FIELD DATA =====================
  171.  
  172.  IF Fld% > 0 AND NOT EOF (1) THEN
  173.    PRINT #2, ""
  174.    PRINT #2, " COLOR FldColor MOD 16, FldColor \ 16"
  175.    PRINT #2, FlNm$+"Fields:" '                           create a line label ...
  176.  
  177.    PRINT " COLOR FldColor MOD 16, FldColor \ 16"
  178.    PRINT FlNm$+"Fields:" '                           create a line label ...
  179.  
  180.    Fld% = 0
  181.    DO
  182.      LINE INPUT #1,Inpt$
  183.      LOCATE 24,1: COLOR 12,0:PRINT LEFT$ (Inpt$,79): COLOR 14,0
  184.    LOOP UNTIL LEFT$(Inpt$,1) = "\"
  185.  
  186. WritePtII:
  187.    DO UNTIL EOF(1)
  188.      LINE INPUT #1,Inpt$
  189.  
  190.      IF Inpt$ <> "" AND LEFT$(Inpt$,1) <> " " THEN
  191.        LOCATE 24,1: COLOR 12,0:PRINT Inpt$: COLOR 14,0
  192.        INCR Fld%
  193.  
  194.        CommaPos = INSTR (Inpt$, ",")
  195.        IF CommaPos = 0 THEN PRINT "NO DELIMITING COMMA IN LINE: ";Inpt$:GOTO AbnlTermi
  196.        DO WHILE INSTR (CommaPos+1, Inpt$, ",") > CommaPos
  197.          CommaPos = INSTR (CommaPos+1, Inpt$, ",")
  198.        LOOP
  199.  
  200.        PRINT " LOCATE " + STR$ (FL(Fld%)) + "," + STR$ (FC(Fld%) + CornerCol)
  201.        PRINT " PRINT USING " + MID$ (Inpt$, CommaPos+1) + ";"_
  202.                                                     + LEFT$ (Inpt$, CommaPos-1)
  203.  
  204.        PRINT #2, " LOCATE " + STR$ (FL(Fld%)) + "," + STR$ (FC(Fld%) + CornerCol)
  205.        PRINT #2, " PRINT USING " + MID$ (Inpt$, CommaPos+1) + ";"_
  206.                                                + LEFT$ (Inpt$, CommaPos-1) + ";"
  207.    END IF
  208.  
  209.    LOOP
  210.  
  211.    PRINT #2, " COLOR ScrColor MOD 16, ScrColor \ 16"
  212.  
  213.  END IF
  214.  
  215.  Report$ = "              DONE, NO ERRORS -- OK"
  216.  ECode = 0
  217.  IF Fld% > 0 AND FL(Fld%) = 0 THEN
  218.     Report$ = "DONE. INPUT FILE ERROR -- TOO MANY FIELDS NAMED."
  219.  END IF
  220.  
  221.  INCR Fld%
  222.  IF FL(Fld%) <> 0 THEN_
  223.   Report$ = "DONE. INPUT FILE ERROR -- TOO MANY FIELD LOCATION"+_
  224.     " MARKERS ({) IN DESIGN."
  225.  
  226.  Print #2, ""
  227.  PRINT #2, "'  ";DATE$;", ";LEFT$(TIME$,5);_
  228.            ":   end of StatWindow generated code for window {";FlNm$;"}"
  229.  CLOSE
  230.  PRINT: PRINT "     "; Report$
  231.  IF Report$ <> "              DONE, NO ERRORS -- OK" THEN
  232.    PLAY "O3 B8 P8 G4"
  233.    DO: LOOP UNTIL INKEY$ <> ""
  234.  END IF
  235.  END
  236. '               <<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>
  237.  
  238. NoSuchInputFl:
  239.      PRINT:PRINT:PRINT "    ERROR -- Input File ";FlNm$;".SW not found"
  240.      PRINT: GOTO AbnlTermi
  241.      RESUME
  242.  
  243. DispLns:
  244.  LOCATE 4,1: PRINT SPACE$(80)
  245.  COLOR 10,0: LOCATE 4,1:PRINT Inpt$;: COLOR 14,0
  246.  RETURN
  247.  
  248. AbnlTermi:
  249.  PLAY "O3 B8 P8 G4"
  250.  DO: LOOP UNTIL INKEY$ <> ""
  251.  END
  252.